
        <html>
			<head>
			     <title>某僵尸网络被控端恶意样本分析 - 360安全卫士</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/papers/11805">http://drops.wooyun.org/papers/11805</a></h1>
				
      <p>
        <p><strong>Author:王阳东(云安全研究员)@360信息安全部</strong></p>

<h1>0x00 引子</h1>

<hr />

<p>近期, 部署于360云平台(<a href="https://cloud.360.cn">https://cloud.360.cn</a>)的”360天眼威胁感知系统”发现系统告警某合作伙伴刚开通的云主机存在异常流量，联合排查后发现有恶意攻击者利用redis crackit漏洞入侵服务器并种植了名为unama的恶意程序。 360云安全研究员 --“王阳东”对此恶意程序进行较为深入的分析，此样本可能是billgates僵尸网络的一个变种。</p>

<h1>0x01 billgates后门简介</h1>

<hr />

<p>billgates是一个近几年非常活跃的DDoS僵尸网络，此程序组成的僵尸网络遍及世界。网络中bot节点多是一些存在弱口令或软件漏洞的linux主机，攻击者利用ssh爆破、exploit、1day、2day等方式对大量IP进行攻击尝试获得服务器的控制权，并通过部署僵尸木马被控端壮大僵尸网络。僵尸网络根据服务端命令可以实现DDoS攻击、反弹shell等多种操作。</p>

<!--more-->

<h1>0x02 样本分析</h1>

<hr />

<p>捕获到的样本文件大小为<code>1223123</code>字节，MD5值为<code>EFF1CB4E98BCC8FBCBDCA671D4C4A050</code>。</p>

<p>通过readelf得到的源代码文件名共有44个，从源文件名猜测此程序有较多工作线程。</p>

<p><img src="http://static.wooyun.org//drops/20160105/2016010510244724780113.png" alt="p1" /></p>

<p>静态分析后发现此样本不同部分间的代码风格差异较大：main函数的代码比较简单粗糙，而主功能类CManager及附属类部分却展现出病毒作者对C++的熟练应用。</p>

<h3>A.main函数</h3>

<p><strong>初始化操作：</strong></p>

<p>程序使用自定义算法从.rodata段解密出配置信息并保存，获取程序文件大小与配置信息中的对应值进行对比实现简单的自校验，然后在父进程路径中查找gdb实现反调试。</p>

<p><img src="http://static.wooyun.org//drops/20160105/201601051024497092723.png" alt="p2" /></p>

<p><img src="http://static.wooyun.org//drops/20160105/201601051024509207833.png" alt="p3" /></p>

<p>调用自定义解密函数，获取硬编码数据进行拼接，得到如DbSecuritySpt、selinux、getty、/tmp/moni.lod、/tmp/gates.lod等字符串并存储到全局变量。检查当前程序路径确定要执行的功能。 路径和功能的关系如下:</p>

<table>
<thead>
<tr>
  <th align="left">程序路径</th>
  <th align="left">后门种类</th>
  <th align="left">功能函数</th>
  <th align="left">主要功能</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="left"><code>/usr/bin/.sshd</code></td>
  <td align="left"></td>
  <td align="left">MainMonitor</td>
  <td align="left">Monitor，守护进程</td>
</tr>
<tr>
  <td align="left">未知路径 (与其它类型不匹配)</td>
  <td align="left">1</td>
  <td align="left">MainBeikong 安装等操作，并执行主要功能</td>
  <td align="left"></td>
</tr>
<tr>
  <td align="left"><code>/usr/bin/bsd-port/getty</code></td>
  <td align="left">2</td>
  <td align="left">MainBackdoor</td>
  <td align="left">主要功能执行程序</td>
</tr>
<tr>
  <td align="left"><code>/bin/</code>、<code>/usr/bin/</code>、<code>/usr/sbin/</code>下netstat、lsof、ps或ss</td>
  <td align="left">3</td>
  <td align="left">MainSystool</td>
  <td align="left">运行<code>/usr/bin/dpkgd</code>下备份的系统工具并过滤输出信息</td>
</tr>
</tbody>
</table>

<p>若是0,1,2类后门则从硬编码中拼接一串十六进制数字符串(其实是两部分十六进制数，以大写字母O分隔，看似一串)，</p>

<p>根据后门类型解密对应部分的十六进制数串，0,1类后门得到的配置是173.254.230.84:3411:1:1:yz:1，</p>

<p>2类后门得到的配置是<code>fk.appledoesnt.com:30000:1:1:yz:1</code>。用冒号分隔字符串得到6个配置项并保存。</p>

<p>检测文件名是否是“update_temporary”，若是则执行DoUpdate并退出。</p>

<p>执行对应的功能函数。</p>

<p><img src="http://static.wooyun.org//drops/20160105/201601051024522799442.png" alt="p4" /></p>

<p><strong>MainMonitor(守护进程)：</strong></p>

<p>进入daemon，产生pid文件<code>/tmp/moni.lod</code>，读取<code>/tmp/notify.file</code>内容并保存，创建线程类CThreadMonGates并启动监视线程，主线程循环sleep挂起。监视线程每分钟判断一下<code>/tmp/gates.lod</code>文件(MainBackdoor功能进程的pid file)， 若文件不存在则复制自身到从notify.file中获取到的文件路径并执行新路径下的程序。</p>

<p><img src="http://static.wooyun.org//drops/20160105/201601051024546301252.png" alt="p5" /></p>

<p><strong>MainBeikong(程序安装)：</strong></p>

<p>进入daemon模式，调用KillChaos结束<code>/tmp/moni.lod</code>和<code>/tmp/gates.lod</code>指向的旧进程 (病毒作者搞错了strcmp的返回值，所以这里的代码并没有什么卵用)，再次结束<code>/tmp/moni.lod</code>，结束<code>/tmp/bill.lock</code>并删除bill.lock。再次结束<code>/tmp/gates.lod</code>并设置自身pid文件。在<code>/etc/init.d</code>、<code>/etc/rc(1-5).d</code>等路径设置S97DbSecuritySpt启动项。</p>

<p>结束<code>/usr/bin/bsd-port/</code>下getty.lock和udevd.lock对应的进程，删除udevd.lock，复制自身到<code>/usr/bin/bsd-port/getty(对应MainBackdoor)</code>并启动。将当前程序路径写入<code>/tmp/notify.file</code>(守护进程使用)，复制当前文件到<code>/usr/bin/.sshd</code>(对应MainMonitor)并启动。执行MainProcess函数。MainProcess函数包含了木马的主要功能。</p>

<p>之所以在安装操作中执行猜测是因为病毒的一处配置错误：</p>

<p>由于之前以字母O分隔的两串hex顺序搞反了，导致2类后门(木马功能主体)得到的是fk.appledoesnt.com这一无效域名，而1类后门(安装程序)却能得到173.254.230.84:3411这个有效IP，所以在没有找到问题原因的情况下在安装函数最后加入主功能函数(MainProcess)也不失为一种临时解决方案。</p>

<p><img src="http://static.wooyun.org//drops/20160105/201601051024556608762.png" alt="p6" /></p>

<p><strong>MainSystool(系统工具替换)：</strong></p>

<p>获取当前程序名及参数，调用<code>/usr/bin/dpkgd/</code>下对应的原始系统程序(netstat 、lsof、ps、ss)。从原始系统程序的输出中过滤掉包含木马所在目录、服务端通信端口等信息的行。</p>

<p><img src="http://static.wooyun.org//drops/20160105/201601051024585246172.png" alt="p7" /></p>

<p><strong>MainBackdoor(木马功能主体)：</strong></p>

<p>进入daemon，设置pid文件，以 S99selinux为服务名创建启动项。移动系统程序ps、ss、netstat、lsof到<code>/usr/bin/dpkgd/</code>目录，复制自身到<code>/bin</code>、<code>/usr/bin</code>、<code>/usr/sbin</code>下替换ps、ss、netstat、lsof等系统程序，执行主功能函数MainProcess。</p>

<p><img src="http://static.wooyun.org//drops/20160105/201601051024595536282.png" alt="p8" /></p>

<p><strong>MainProcess函数：</strong></p>

<p>主功能函数MainProcess首先挂起2秒，删除升级用的临时文件(<code>./update_temporary</code>)，根据<code>/etc/resolv.conf</code>和谷歌dns(8.8.8.8、8.8.4.4)初始化CDNSCache类的实例<code>g_dnsCache</code>。</p>

<p>初始化<code>g_cnfgDoing</code>(尝试读取conf.n文件)、<code>g_cmdDoing</code>(尝试读取cmd.n文件)、<code>g_statBase</code>类实例，将<code>g_sProvinceDns</code>中330个IP转为数字形式存入<code>g_provinceDns</code>对象。尝试通过insmod加载当前目录下的xpacket.ko驱动(未发现此文件)。从<code>/usr/lib/libamplify.so</code>中读取IP存入<code>g_AmpResource</code>结构(未发现此文件)。初始化CManager(1076字节)，设置信号处理函数，无限循环sleep。</p>

<p><img src="http://static.wooyun.org//drops/20160105/201601051025015057092.png" alt="p9" /></p>

<h3>B.CManager类(画风突变)：</h3>

<p>CManager类包含了bot的所有功能，此类拥有很多成员，每个成员实现一定的功能，其主要成员对应列表大致如下：</p>

<table>
<thead>
<tr>
  <th align="left">成员</th>
  <th align="left">偏移</th>
  <th align="left">功能</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="left">vectorIPs</td>
  <td align="left">0x00</td>
  <td align="left">控制服务器IP地址(可存在多个)</td>
</tr>
<tr>
  <td align="left">CThreadSignaledMessageList <CCmdMsg></td>
  <td align="left">0x0c</td>
  <td align="left">CCmdMsg的消息队列(线程安全) CCmdMsg包含控制服务器下发的控制指令</td>
</tr>
<tr>
  <td align="left">CThreadTaskGates</td>
  <td align="left">0xe4</td>
  <td align="left">任务分发线程类，等待CCmdMsg消息队列</td>
</tr>
<tr>
  <td align="left">CThreadClientStatus</td>
  <td align="left">0xe8</td>
  <td align="left">状态更新线程类，每秒更新cpu及网络使用情况</td>
</tr>
<tr>
  <td align="left">CThreadSignaledMessageList <CThreadConnection></td>
  <td align="left">0xf0</td>
  <td align="left">CThreadConnection的队列(线程安全)</td>
</tr>
<tr>
  <td align="left">CThreadLoopCmd</td>
  <td align="left">0x1c8</td>
  <td align="left">循环等待信号，并最终执行cmd.n文件配置的命令</td>
</tr>
<tr>
  <td align="left">CThreadFakeDetect</td>
  <td align="left">0x1cc</td>
  <td align="left">测验bot有效性的类</td>
</tr>
<tr>
  <td align="left">CThreadSignaledMessageList <CThreadShell></td>
  <td align="left">0x1d0</td>
  <td align="left">CThreadShell的队列(线程安全) CThreadShell用来保持一个反向连接的shell会话</td>
</tr>
<tr>
  <td align="left">CThreadDoFun</td>
  <td align="left">0x2ac</td>
  <td align="left">通过一些计算判断bot文件有效性并设置<code>g_bReal</code>变量</td>
</tr>
<tr>
  <td align="left">CThreadKillChaos</td>
  <td align="left">0x2b0</td>
  <td align="left">每5分钟检查pid file并执行清理</td>
</tr>
<tr>
  <td align="left">CInitResponse</td>
  <td align="left">0x2b4</td>
  <td align="left">初始化数据包，包含当前被控机器的一些状态数据</td>
</tr>
<tr>
  <td align="left">CThreadMutex_Operation</td>
  <td align="left">0x378</td>
  <td align="left">CManager互斥量，线程安全</td>
</tr>
<tr>
  <td align="left">SetOfCThreadFXConn</td>
  <td align="left">0x390</td>
  <td align="left">CThreadFXConnection类组成的set (C++ STL)</td>
</tr>
<tr>
  <td align="left">CTask</td>
  <td align="left">0x400</td>
  <td align="left">包含控制服务器下发的命令信息</td>
</tr>
</tbody>
</table>

<p><code>CManager::Initialize</code>函数对成员进行了初始化操作，根据<code>g_cmdDoing</code>检查是否有未处理的命令，若有则立刻执行。</p>

<p>初始化完成员变量后执行<code>CManager::MainProcess</code>，根据<code>g_iGatsIsFx</code>的值(此时为1)设置程序工作在被控端模式，获取vectorIPs中的IP (此时只有strConnTgts指向的IP)针对每个IP初始化一个CThreadFXConnection并加入set，完成后无限循环sleep。</p>

<p>CThreadFXConnection线程类最终调用<code>CManager::FXConnectionProcess</code>建立与控制服务器的TCP连接，连接建立后调用<code>CManager::ConnectionProcess</code>初始化CInitResponse对象并发送一个通知数据包：</p>

<p><img src="http://static.wooyun.org//drops/20160105/2016010510250223086102.png" alt="p10" /></p>

<p>其中CInitResponse中包含IP(c0 a8 7a 87) 192.168.122.135，系统版本信息，Cpu及内存等信息。</p>

<p>发送完初始化包后，<code>CManager::ConnectionProcess</code>进入收发数据的循环，通过<code>CManager::RecvCommand</code>接收数据并封装到CCmdMsg结构，将CCmdMsg加入<code>CThreadSignaledMessageList&lt;CCmdMsg&gt;</code>队列。</p>

<p>通过<code>CManager::SendClientStatus</code>发送bot状态。</p>

<p>CCmdMsg由<code>CManager::TastGatesProcess</code>线程负责从接收队列中取出并分发(CThreadTaskGates线程类启动的线程)。</p>

<p>CCmdMsg大致类型如下：</p>

<table>
<thead>
<tr>
  <th align="left">类型</th>
  <th align="left">功能</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="left">1</td>
  <td align="left">调用CManager::DoAtkStartCommand初始化一个DDoS攻击</td>
</tr>
<tr>
  <td align="left">2</td>
  <td align="left">根据CManager状态选择执行CManager::StopUpdate停止更新或CManager::StopAtkTask停止攻击</td>
</tr>
<tr>
  <td align="left">3</td>
  <td align="left">调用CManager::DoConfigCommand更新g_cnfgDoing及conf.n配置文件</td>
</tr>
<tr>
  <td align="left">5</td>
  <td align="left">调用CManager::DoUpdateCommand更新程序文件</td>
</tr>
<tr>
  <td align="left">7</td>
  <td align="left">调用CManager::DoCommandCommand更新CCmdDoing对象</td>
</tr>
<tr>
  <td align="left">8</td>
  <td align="left">调用CManager::DoFakeDetectCommand</td>
</tr>
<tr>
  <td align="left">9</td>
  <td align="left">调用CManager::DoShellCommand建立到指定IP及端口的反弹shell连接</td>
</tr>
</tbody>
</table>

<p>CManager类大致结构如下：</p>

<p><img src="http://static.wooyun.org//drops/20160105/2016010510250466930114.png" alt="p11" /></p>

<p><img src="http://static.wooyun.org//drops/20160105/2016010510250685765122.png" alt="p12" /></p>

<p>DDoS攻击最终通过<code>CManager::DoAtkStartCommand</code>实现，这个函数读取CCmdMsg中的CTask对象，根据CConfigDoing(conf.n)全局配置设置CThreadAtkCtrl线程对象。<code>CThreadAtkCtrl::ProcessMain</code>会根据配置执行普通攻击或内核级攻击。普通攻击通过<code>CThreadAtkCtrl::DoNormalSubTask</code>执行，该函数最终调用<code>CThreadAtkCtrl::StartNormalSubTask</code>，根据每个任务初始化一个CThreadNormalAtkExcutor线程类。最终线程函数为<code>CThreadNormalAtkExcutor::ProcessMain</code>，此函数会根据CSubTask.taskType的值初始化一个CPacketAttack的子类用于执行相应的攻击，type值与攻击类型的对应关系如下：</p>

<table>
<thead>
<tr>
  <th align="left">CSubTask.taskType</th>
  <th align="left">子类</th>
  <th align="left">攻击方式</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="left">0x10、0x11(var_06=0)</td>
  <td align="left">CAttackSyn</td>
  <td align="left">SYN半连接</td>
</tr>
<tr>
  <td align="left">0x10、0x11(var_06=1)</td>
  <td align="left">CAttackCompress</td>
  <td align="left">自定义IP、TCP头</td>
</tr>
<tr>
  <td align="left">0x20</td>
  <td align="left">CAttackUdp</td>
  <td align="left">UDP</td>
</tr>
<tr>
  <td align="left">0x21、0x23、0x24</td>
  <td align="left">CAttackDns</td>
  <td align="left">随机子域名攻击</td>
</tr>
<tr>
  <td align="left">0x22</td>
  <td align="left">CAttackAmp</td>
  <td align="left">DNS放大</td>
</tr>
<tr>
  <td align="left">0x25</td>
  <td align="left">CAttackPrx</td>
  <td align="left">某种DNS攻击</td>
</tr>
<tr>
  <td align="left">0x30</td>
  <td align="left">CAttackIcmp</td>
  <td align="left">ping</td>
</tr>
<tr>
  <td align="left">0x40</td>
  <td align="left">CTcpAttack</td>
  <td align="left">任意TCP数据，发送攻击者自定义的数据内容</td>
</tr>
<tr>
  <td align="left">0x41</td>
  <td align="left">CAttackCc</td>
  <td align="left">CC</td>
</tr>
<tr>
  <td align="left">0x42</td>
  <td align="left">CAttackIe</td>
  <td align="left">未实现，重新设置成0x41</td>
</tr>
</tbody>
</table>

<p><code>CThreadNormalAtkExcutor::ProcessMain</code>根据配置调用Create成员构造特定类型所需的数据。</p>

<p>调用成员函数Do，Do调用MakePacket构造攻击数据包，调用UpdateCurVariant修改数据包的一些属性(如TCP顺序号等)，调用SendPacket发送数据包。Do函数被循环调用，直到预定数目的攻击完成。</p>

<p>内核攻击通过调用<code>CThreadAtkCtrl::DoKernelSubTask</code>执行(type 0x43)，</p>

<p>该函数最终调用<code>CThreadAtkCtrl::StartKernelSubTask</code>，初始化CThreadKernelAtkExcutor。</p>

<p>最终执行线程为<code>CThreadKernelAtkExcutor::ProcessMain</code>。</p>

<p>此函数fork当前进程，在每个CPU上执行函数<code>CThreadKernelAtkExcutor::KCfgDev</code>，此函数发送命令<code>rem_device_all</code>(移除所有设备)、<code>add_device ethN</code>(添加网卡N)、<code>max_before_softirq</code>(改变数据包内核中断阈值)到pktgen设备，N为0、1、2等，指向网卡名称。pktgen设备位于<code>/proc/net/pktgen/kpktgend_X</code>，其中X为当前cpu号。病毒作者在这里犯了一个错误，<code>kpktgend_X</code>中X指关联到当前包产生器的cpu号，但病毒作者在这里用的是网卡号，这个错误导致病毒在生成数据包时只用到了一个cpu，无法充分利用多核多cpu的性能。完成pktgen设备的初始化后，<code>CThreadKernelAtkExcutor::ProcessMain</code>调用<code>CThreadKernelAtkExcutor::KCfgCfg</code>，此函数通过<code>/proc/net/pktgen/ethN</code>配置包产生器。配置包含攻击目标IP端口、发送攻击数据包数目、包大小随机范围、数据包之间的等待时间、源IP随机范围、源端口随机范围等信息。设置完pktgen的参数后<code>CThreadKernelAtkExcutor::ProcessMain</code>向<code>/proc/net/pktgen/pgctrl</code>写入start来启动攻击。</p>

<h1>0x03 攻击模拟</h1>

<hr />

<p>修改bot的控制服务器IP到本机并编写简单的控制端脚本，在虚拟机中进行tcp rst攻击实验：</p>

<p><img src="http://static.wooyun.org//drops/20160105/2016010510250734166131.png" alt="p13" /></p>

<p>在设置攻击目标为192.168.122.1:9876，数据包大小范围为128-500，线程数目为200，攻击次数100并关闭Cpu负载均衡开关后得到的攻击数据包如下：</p>

<p><img src="http://static.wooyun.org//drops/20160105/2016010510250984287141.png" alt="p14" /></p>

<p>可以看到单个bot在此次攻击中共发送了21268252个攻击数据包，数量惊人。</p>

<p><img src="http://static.wooyun.org//drops/20160105/2016010510251043147151.png" alt="p15" /></p>

<p>由于Cpu使用率限制选项设为关闭，bot最大化使用系统资源，双核cpu达到192.4%的利用率。</p>

<h1>0x04 总结</h1>

<hr />

<p>通过此样本可以发现黑产团队的DDoS攻击实力已经到了”比较娴熟”的地步，而根据样本中不同部分的不同代码风格猜测黑产团队可能存在多人多团队合作的编程方式或“黑吃黑”的代码盗用情况，也许。</p>

<p>IT基础技术不断发展的今天，追逐利益的黑产团队依然在不懈的利用刚暴露出来的漏洞攻击着那些疏忽的操作系统，威胁着用户的数据安全。用户愿意将他们的数据、过程实现、想法放到我们的云平台，是因为他们相信我们能让这些数据的隐私和安全得到有力的保证，360云安全团队持续为您构建一个安全云。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          